// 前端封装API接口模块 ：收货地址address模块
import http from "@/utils/request";

// 保存/新增收货地址 
// POST /address/save
// | 参数名   | 参数说明 |   备注
// | id | 可选参数，如果有id表示做编辑操作，如果没有id参数表示做新增操作
// | name |  姓名
// |  tel |  电话
// |  province  | 省份
// |  city |  城市
// |  county |  区县
// |  area_code |  地区编码，通过省市区选择获取（必填）
// |  postal_code |  邮政编码
// |  address_detail |  详细地址
// |  is_default |  是否选择默认 0 | 1
/**
 * 保存或新增收货地址
 * @param {Object} params - 包含地址信息的参数对象
 * @returns {Promise} - 返回一个Promise对象，成功时返回服务器响应数据，失败时捕获错误
 */
export function saveAddressAPI(params) {
	// 参数校验
	const requiredParams = ['area_code'];
	const missingParams = requiredParams.filter(param => !params[param]);
	if (missingParams.length > 0) {
		console.error(`saveAddressAPI缺少必要参数: ${missingParams.join(', ')}`);
		return Promise.reject(new Error(`缺少必要参数: ${missingParams.join(', ')}`));
	}
	return http.request({
			url: "/address/save",
			method: "post",
			data: params
		})
		.catch(error => {
			console.error('saveAddressAPI请求失败:', error);
			return Promise.reject(error);
		});
}

// 查询收货地址列表
// GET /address/list
// | 参数名 | 参数说明 | 备注 |
// | 无参数 | 是登录用户的收货地址       
/**
 * 查询登录用户的收货地址列表
 * @returns {Promise} - 返回一个Promise对象，成功时返回服务器响应数据，失败时捕获错误
 */
export function getAddressListAPI() {
	return http.request({
			url: "/address/list",
			method: "get"
		})
		.catch(error => {
			console.error('getAddressListAPI请求失败:', error);
			return Promise.reject(error);
		});
}

// 根据id查询收货地址信息
// GET /address/detail
// | 参数名 | 参数说明   | 备注 |
// | id     | 收货地址id |      |
/**
 * 根据收货地址ID查询地址信息
 * @param {string|number} id - 收货地址ID
 * @returns {Promise} - 返回一个Promise对象，成功时返回服务器响应数据，失败时捕获错误
 */
export function getAddressDetailByIdAPI(id) {
	if (!id) {
		console.error('getAddressDetailByIdAPI缺少必要参数: id');
		return Promise.reject(new Error('缺少必要参数: id'));
	}
	return http.request({
			url: "/address/detail",
			method: "get",
			params: {
				id
			}
		})
		.catch(error => {
			console.error('getAddressDetailByIdAPI请求失败:', error);
			return Promise.reject(error);
		});
}

// 根据id删除收货地址
// POST /address/delete
// | 参数名 | 参数说明   | 备注 |
// | id     | 收货地址id |
/**
 * 根据收货地址ID删除地址
 * @param {string|number} id - 收货地址ID
 * @returns {Promise} - 返回一个Promise对象，成功时返回服务器响应数据，失败时捕获错误
 */
export function deleteAddressByIdAPI(id) {
	if (!id) {
		console.error('deleteAddressByIdAPI缺少必要参数: id');
		return Promise.reject(new Error('缺少必要参数: id'));
	}
	return http.request({
			url: "/address/delete", // 统一路径格式
			method: "post",
			data: {
				id
			}
		})
		.catch(error => {
			console.error('deleteAddressByIdAPI请求失败:', error);
			return Promise.reject(error);
		});
}

// 获取默认的收货地址
// GET /address/default
// | 参数名 | 参数说明                                                                   
// | id     | 可选参数，如果传递了id就获取id对应的收货地址，如果没有传递id就获取默认的收货地址 
/**
 * 获取默认收货地址或指定ID的收货地址
 * @param {string|number} [id] - 可选的收货地址ID，若未提供则获取默认收货地址
 * @returns {Promise} - 返回一个Promise对象，成功时返回服务器响应数据，失败时捕获错误
 */
export function getDefaultAddressAPI(id) {
	return http.request({
			url: "/address/default",
			method: "get",
			params: {
				id
			}
		})
		.catch(error => {
			console.error('getDefaultAddressAPI请求失败:', error);
			return Promise.reject(error);
		});
}